﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BussinesLayer.Clases;
using CustomControl;
using DTO.Clases;
using Utilities;

namespace Aplicacion.Compras.IngresarCompra
{
    public partial class FrmConsulta : Form
    {
        #region Atributos

        /// <summary>
        /// Representa un objeto para los datos de criterio de consulta de Factura Proveedor.
        /// </summary>
        private CriterioFacturaProveedor miCriterio;

        /// <summary>
        /// Objeto para la lógica de negocio de Factura de Proveedor.
        /// </summary>
        private BussinesFacturaProveedor miBussinesFactura;

        /// <summary>
        /// Objeto de lógica de negocio de Usuario.
        /// </summary>
        private BussinesUsuario miBussinesUsuario;

        private BussinesFormaPago miBussinesPago;

        /// <summary>
        /// Proporciona una interfaz para indicar al usuario el error en algun control.
        /// </summary>
        private ErrorProvider miError;

        #endregion

        #region Utilidades

        /// <summary>
        /// Obtiene o establece el valor que indica si se habilita color o no en el formulario segun la configuración.
        /// </summary>
        private bool EnableColor;

        /// <summary>
        /// Obteien o establece el numero que indica que iteracion se realizo.
        /// </summary>
        private int Iteracion;

        /// <summary>
        /// Obtiene o establece el valor que indica si Chequeo la opcion de facturas anuladas o no.
        /// </summary>
        private bool ActivaChecked { set; get; }

        /// <summary>
        /// Obtiene o establece el valor que indica si se encuentra abierto el Form de Proveedor.
        /// </summary>
        private bool FormProveedor { set; get; }

        /// <summary>
        /// Objeto para hacer uso del Formulario de Proveedor.
        /// </summary>
        Proveedor.frmProveedor formProveedor;

        /// <summary>
        /// Objeto para hacer uso del Formulario de Editar Factura Proveedor.
        /// </summary>
        private FrmModificarCompra frmEditaFactura;

        /// <summary>
        /// Objeto para hacer uso del Formulario de Producto.
        /// </summary>
        FrmAgregarProducto frmProducto;

        /// <summary>
        /// Objeto para hacer uso del Formulario de Editar Registro de Producto.
        /// </summary>
        FrmEditarProducto frmEditaProducto;

        /// <summary>
        /// Obtiene o establece el valor que indica si se realiza la consulta primaria o secundaria.
        /// </summary>
        private bool BtnSearch = true;

        /// <summary>
        /// Indica si solo se realiza una transferencia de datos por consulta.
        /// </summary>
        private bool SearchProveedor = false;

        /// <summary>
        /// Obtiene o establece el valor de Codigo del Producto.
        /// </summary>
        private int CodigoProveedor;

        /// <summary>
        /// Obtiene o establece el valor de la fecha inicial de consulta.
        /// </summary>
        private DateTime Fecha1;

        /// <summary>
        /// Obtiene o establece el valor de la fecha secundaria de consulta.
        /// </summary>
        private DateTime Fecha2;

        /// <summary>
        /// Obtiene o establece el valor del registro a segir o registro base.
        /// </summary>
        private int RowFactura;

        /// <summary>
        /// Obtiene o establece el número maximo de registro a cargar.
        /// </summary>
        private int RowMaxFactura;

        /// <summary>
        /// Obtiene o establece el total de registros en la base de datos.
        /// </summary>
        private long TotalRowFactura;

        /// <summary>
        /// Obtiene o establece el número total de paginas que componen la consulta.
        /// </summary>
        private long PaginasFactura;

        /// <summary>
        /// Obtiene o establece el número de la pagina actual.
        /// </summary>
        private int CurrentPageFactura;

        /// <summary>
        /// Representa un objeto para el tratamiento de codigo dinamico del Panel Tributario
        /// </summary>
        private List<PanelTributario> miPanelTributario;

        /// <summary>
        /// Objeto para el acceso al ensamblado de la aplicación.
        /// </summary>
        private System.Reflection.Assembly assembly;

        /// <summary>
        /// Representa el Stream de la Imagen de Medida.
        /// </summary>
        private System.IO.Stream ImgMedidaStream;

        /// <summary>
        /// Representa el Stream de la Imagen de Color.
        /// </summary>
        private System.IO.Stream ImgColorStream;

        /// <summary>
        /// Representa el Stream de la Imagen de Lote.
        /// </summary>
        private System.IO.Stream ImgLoteStream;

        /// <summary>
        /// Representa la ruta del ensamblado de la imagen de color gris de Medida.
        /// </summary>
        private const string ImagenMedida = "Aplicacion.Recursos.Iconos.medidaGris.png";

        /// <summary>
        /// Representa la ruta del ensamblado de la imagen de color gris de Color.
        /// </summary>
        private const string ImagenColor = "Aplicacion.Recursos.Iconos.colorGris.png";

        /// <summary>
        /// Representa la ruta del ensamblado de la imagen de color gris de Lote.
        /// </summary>
        private const string ImagenLote = "Aplicacion.Recursos.Iconos.loteGris.png";

        /// <summary>
        /// Indica si se quiere ver las medidas en el Grid.
        /// </summary>
        private bool BtnVerMedidaPress = true;

        /// <summary>
        /// Indica que no se quiere ver las medidas en el Grid.
        /// </summary>
        private bool BtnNoVerMedidaPress = true;

        /// <summary>
        /// Indica que se quiere ver el Color en el Grid.
        /// </summary>
        private bool BtnVerColorPress = true;

        /// <summary>
        /// Indica que no se quiere ver el Color en el Grid.
        /// </summary>
        private bool BtnNoVerColorPress = true;

        /// <summary>
        /// Indica que se quiere ver el Lote en el Grid.
        /// </summary>
        private bool BtnVerLotePress = true;

        /// <summary>
        /// Indica que no se quiere ver el Lote en el Grid.
        /// </summary>
        private bool BtnNoVerLotePress = true;

        #endregion

        #region Mensajes

        /// <summary>
        /// Representa el texto: El campo Codigo es requerido.
        /// </summary>
        private const string CodigoReq = "El campo Codigo es requerido.";

        /// <summary>
        /// Representa el texto: El Codigo que ingreso tiene formato incorrecto.
        /// </summary>
        private const string CodigoFormat = "El Codigo que ingreso tiene formato incorrecto.";

        #endregion

        public FrmConsulta()
        {
            InitializeComponent();
            EnableColor = Convert.ToBoolean(AppConfiguracion.ValorSeccion("color"));
            miCriterio = new CriterioFacturaProveedor();
            miError = new ErrorProvider();
            RowMaxFactura = 5;
            miBussinesFactura = new BussinesFacturaProveedor();
            miBussinesUsuario = new BussinesUsuario();
            miBussinesPago = new BussinesFormaPago();
            miPanelTributario = new List<PanelTributario>();
        }

        private void FrmConsulta_Load(object sender, EventArgs e)
        {
            CompletaEventos.Completa += new CompletaEventos.CompletaAccion(CompletaEventos_Completo);
            cbCriterio1.DataSource = miCriterio.lista1;
            cbCriterio.DataSource = miCriterio.lista;
            cbCriterio2.DataSource = miCriterio.lista2;
            assembly = System.Reflection.Assembly.GetExecutingAssembly();
            CargarRecursos();
        }

        private void FrmConsulta_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData.Equals(Keys.F3))
            {
                tsEditarFactura_Click(this.tsEditarFactura, new EventArgs());
            }
            else
            {
                if (e.KeyData.Equals(Keys.F4))
                {
                    tsBtnAbono_Click(this.tsBtnAbono, new EventArgs());
                }
                else
                {
                    if (e.KeyData.Equals(Keys.Escape))
                    {
                        this.Close();
                    }
                }
            }
        }

        private void FrmConsulta_FormClosing(object sender, FormClosingEventArgs e)
        {
            CerrarForms();
        }

        private void tsSalir_Click(object sender, EventArgs e)
        {
           // CompletaEventos.CapturaEvento(false);
            this.Close();
        }

        private void cbCriterio_SelectedValueChanged(object sender, EventArgs e)
        {
            var criterio = Convert.ToInt32(cbCriterio.SelectedValue);
            if (criterio == 1)
            {
                btnBuscarCodigo.Enabled = false;
                cbCriterio1.SelectedIndex = 0;
                cbCriterio1_SelectionChangeCommitted(null, null);
            }
            else
            {
                btnBuscarCodigo.Enabled = true;
            }
        }

        private void txtCodigo_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
            {
                btnBuscar_Click(null, null);
            }
        }

        private void btnBuscarCodigo_Click(object sender, EventArgs e)
        {
            if (!FormProveedor)
            {
                formProveedor = new Proveedor.frmProveedor();
                formProveedor.MdiParent = this.MdiParent;
                formProveedor.Extension = true;
                formProveedor.tcProveedor.SelectTab(1);
                FormProveedor = true;
                formProveedor.Show();
                SearchProveedor = true;
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            var id = Convert.ToInt32(cbCriterio.SelectedValue);
            if (!Validacion.EsVacio(txtCodigo, miError, CodigoReq))
            {
                if (id == 1)
                {
                    if (Validacion.ConFormato(Validacion.TipoValidacion.NumeroGuion,
                        txtCodigo, miError, CodigoFormat))
                    {
                        ConsultaFacturaPorNumero(txtCodigo.Text);
                    }
                }
                else
                {
                    if (Validacion.ConFormato(Validacion.TipoValidacion.Numeros,
                        txtCodigo, miError, CodigoFormat))
                    {
                        ConsultaFacturaPorProveedor(txtCodigo.Text);
                    }
                }
                BtnSearch = true;
                dgvFactura_CellClick(null, null);
                ColorFacturaAnulada();
            }
        }

        private void cbCriterio1_SelectionChangeCommitted(object sender, EventArgs e)
        {
            var criterio1 = Convert.ToInt32(cbCriterio1.SelectedValue);
            if (criterio1 == 1)
            {
                cbCriterio2.Enabled = false;
                dtpFecha1.Enabled = false;
                dtpFecha2.Enabled = false;
                btnBuscar1.Enabled = false;
                btnBuscar.Enabled = true;
            }
            else
            {
                cbCriterio2.Enabled = true;
                dtpFecha1.Enabled = true;
                btnBuscar1.Enabled = true;
                btnBuscar.Enabled = false;
                cbCriterio.SelectedIndex = 1;
            }
        }

        private void cbCriterio2_SelectionChangeCommitted(object sender, EventArgs e)
        {
            var criterio2 = Convert.ToInt32(cbCriterio2.SelectedValue);
            if (criterio2 == 1)
            {
                dtpFecha2.Enabled = false;
            }
            else
            {
                dtpFecha2.Enabled = true;
            }
        }

        private void btnBuscar1_Click(object sender, EventArgs e)
        {
            var criterio1 = Convert.ToInt32(cbCriterio1.SelectedValue);
            var criterio2 = Convert.ToInt32(cbCriterio2.SelectedValue);
            if (criterio1 == 2)
            {
                if (String.IsNullOrEmpty(txtCodigo.Text))
                {
                    if (criterio2 == 1)  //Factura por fecha
                    {
                        ConsultaFacturaFecha();
                    }
                    else                //Factura por periodo
                    {
                        InvertirFechas();
                        ConsultaFacturaPeriodo();
                    }
                }
                else
                {
                    if (criterio2 == 1)  //Factura por proveedor y fecha
                    {
                        ConsultaFacturaFechaProveedor();
                    }
                    else                //Factura por proveedor y periodo
                    {
                        InvertirFechas();
                        ConsultaFacturaPeriodoProveedor();
                    }
                }
                BtnSearch = false;
                dgvFactura_CellClick(null, null);
            }
        }

        private void dgvFactura_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dgvFactura.RowCount != 0)
            {
                var id = (int)dgvFactura.CurrentRow.Cells["Id"].Value;
                var idPago = (int)dgvFactura.CurrentRow.Cells["IdFormaPago"].Value;
                try
                {
                    dgvListaArticulos.AutoGenerateColumns = false;
                    var tabla = miBussinesFactura.ConsultaProductoFacturaProveedor(id);
                    CalcularTotales(tabla);
                    //if (idPago == 2)
                    //{
                        PagosAFactura(id);
                    //}
                    dgvListaArticulos.DataSource = tabla;
                }
                catch (Exception ex)
                {
                    OptionPane.MessageError(ex.Message);
                }
            }
        }

        private void btnInicio_Click(object sender, EventArgs e)
        {
            if (CurrentPageFactura > 1)
            {
                var paginaActual = CurrentPageFactura;
                for (int i = paginaActual; i > 1; i--)
                {
                    RowFactura = RowFactura - RowMaxFactura;
                    CurrentPageFactura--;
                }
                try
                {
                    if (Iteracion == 1)
                    {
                        dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor
                                                   (CodigoProveedor, ActivaChecked, RowFactura, RowMaxFactura);
                    }
                    else
                    {
                        if (Iteracion == 2)
                        {
                            dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor
                                                         (Fecha1, ActivaChecked, RowFactura, RowMaxFactura);
                        }
                        else
                        {
                            if (Iteracion == 3)
                            {
                                dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor
                                                           (Fecha1, Fecha2, ActivaChecked, RowFactura, RowMaxFactura);
                            }
                            else
                            {
                                dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor
                                                              (CodigoProveedor, Fecha1, Fecha2, ActivaChecked, RowFactura, RowMaxFactura);
                            }
                        }
                    }
                    lblStatusFactura.Text = CurrentPageFactura + " / " + PaginasFactura;
                    ColorFacturaAnulada();
                    dgvFactura_CellClick(null, null);
                }
                catch (Exception ex)
                {
                    OptionPane.MessageError(ex.Message);
                }
            }
        }

        private void btnAnterior_Click(object sender, EventArgs e)
        {
            if (CurrentPageFactura > 1)
            {
                RowFactura = RowFactura - RowMaxFactura;
                if (RowFactura <= 0)
                    RowFactura = 0;
                try
                {
                    if (Iteracion == 1)
                    {
                        dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor
                                                   (CodigoProveedor, ActivaChecked, RowFactura, RowMaxFactura);
                    }
                    else
                    {
                        if (Iteracion == 2)
                        {
                            dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor
                                                          (Fecha1, ActivaChecked, RowFactura, RowMaxFactura);
                        }
                        else
                        {
                            if (Iteracion == 3)
                            {
                                dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor
                                                            (Fecha1, Fecha2, ActivaChecked, RowFactura, RowMaxFactura);
                            }
                            else
                            {
                                dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor
                                                              (CodigoProveedor, Fecha1, Fecha2, ActivaChecked, RowFactura, RowMaxFactura);
                            }
                        }
                    }
                    CurrentPageFactura--;
                    lblStatusFactura.Text = CurrentPageFactura + " / " + PaginasFactura;
                    ColorFacturaAnulada();
                    dgvFactura_CellClick(null, null);
                }
                catch (Exception ex)
                {
                    OptionPane.MessageError(ex.Message);
                }
            }
        }

        private void btnSiguiente_Click(object sender, EventArgs e)
        {
            if (CurrentPageFactura < PaginasFactura)
            {
                RowFactura = RowFactura + RowMaxFactura;
                try
                {
                    if (Iteracion == 1)
                    {
                        dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor
                                                   (CodigoProveedor, ActivaChecked, RowFactura, RowMaxFactura);
                    }
                    else
                    {
                        if (Iteracion == 2)
                        {
                            dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor
                                                          (Fecha1, ActivaChecked, RowFactura, RowMaxFactura);
                        }
                        else
                        {
                            if (Iteracion == 3)
                            {
                                dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor
                                                            (Fecha1, Fecha2, ActivaChecked, RowFactura, RowMaxFactura);
                            }
                            else
                            {
                                dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor
                                                              (CodigoProveedor, Fecha1, Fecha2, ActivaChecked, RowFactura, RowMaxFactura);
                            }
                        }
                    }
                    CurrentPageFactura++;
                    lblStatusFactura.Text = CurrentPageFactura + " / " + PaginasFactura;
                    ColorFacturaAnulada();
                    dgvFactura_CellClick(null, null);
                }
                catch (Exception ex)
                {
                    OptionPane.MessageError(ex.Message);
                }
            }
        }

        private void btnFin_Click(object sender, EventArgs e)
        {
            if (CurrentPageFactura < PaginasFactura)
            {
                var paginaActual = CurrentPageFactura;
                for (int i = paginaActual; i < PaginasFactura; i++)
                {
                    RowFactura = RowFactura + RowMaxFactura;
                    CurrentPageFactura++;
                }
                try
                {
                    if (Iteracion == 1)
                    {
                        dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor
                                                   (CodigoProveedor, ActivaChecked, RowFactura, RowMaxFactura);
                    }
                    else
                    {
                        if (Iteracion == 2)
                        {
                            dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor
                                                         (Fecha1, ActivaChecked, RowFactura, RowMaxFactura);
                        }
                        else
                        {
                            if (Iteracion == 3)
                            {
                                dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor
                                                             (Fecha1, Fecha2, ActivaChecked, RowFactura, RowMaxFactura);
                            }
                            else
                            {
                                dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor
                                                              (CodigoProveedor, Fecha1, Fecha2, ActivaChecked, RowFactura, RowMaxFactura);
                            }
                        }
                    }
                    lblStatusFactura.Text = CurrentPageFactura + " / " + PaginasFactura;
                    ColorFacturaAnulada();
                    dgvFactura_CellClick(null, null);
                }
                catch (Exception ex)
                {
                    OptionPane.MessageError(ex.Message);
                }
            }
        }

        private void tsEditarFactura_Click(object sender, EventArgs e)
        {
            if (dgvFactura.RowCount != 0)
            {
                if (!FormProveedor)
                {
                    frmEditaFactura = new FrmModificarCompra();
                    frmEditaFactura.MdiParent = this.MdiParent;
                    frmEditaFactura.MiFacturaProveedor = GetFacturaProveedor();
                    FormProveedor = true;
                    frmEditaFactura.Show();
                }
            }
            else
            {
                OptionPane.MessageInformation("No hay registros para editar.");
            }
        }

        private void tsBtnAbono_Click(object sender, EventArgs e)
        {
            if (dgvFactura.RowCount != 0)
            {
                if (/*(int)dgvFactura.CurrentRow.Cells["IdFormaPago"].Value == 2 &&*/
                    !txtResta.Text.Equals("0"))
                {
                    //validar que solo habra este form:
                    if (!FormProveedor)
                    {
                        var frmAbono = new Pago.FrmAbonoCompra();
                        frmAbono.MdiParent = this.MdiParent;
                        frmAbono.IdFactura = (int)dgvFactura.CurrentRow.Cells["Id"].Value;
                        frmAbono.NumeroFactura = (string)dgvFactura.CurrentRow.Cells["Numero"].Value;
                        frmAbono.txtTotal.Text = txtResta.Text;
                        frmAbono.Show();
                    }
                }
                else
                {
                    OptionPane.MessageInformation("Esta Factura no presenta saldo.");
                }
            }
            else
            {
                OptionPane.MessageInformation("Debe seleccionar una factura para Abonar.");
            }
        }

        private void tsVerMedida_Click(object sender, EventArgs e)
        {
            if (BtnVerMedidaPress)
            {
                tsVerMedida.Image = new Bitmap(ImgMedidaStream);
                tsVerMedida.Text = "No Ver Unidad de Medida";
                BtnNoVerMedidaPress = true;
                BtnVerMedidaPress = false;
                dgvListaArticulos.Columns["Unidad"].Visible = true;
                dgvListaArticulos.Columns["Medida"].Visible = true;
                dgvListaArticulos.Columns["Articulo"].Width -= Unidad.Width;
                dgvListaArticulos.Columns["Articulo"].Width -= Medida.Width;
            }
            else
            {
                if (BtnNoVerMedidaPress)
                {
                    tsVerMedida.Image = ((Image)(miResources.GetObject("tsVerMedida.Image")));
                    tsVerMedida.Text = "Ver Unidad de Medida";
                    BtnNoVerMedidaPress = false;
                    BtnVerMedidaPress = true;
                    dgvListaArticulos.Columns["Unidad"].Visible = false;
                    dgvListaArticulos.Columns["Medida"].Visible = false;
                    dgvListaArticulos.Columns["Articulo"].Width += Unidad.Width;
                    dgvListaArticulos.Columns["Articulo"].Width += Medida.Width;
                }
            }
        }

        private void tsVerColor_Click(object sender, EventArgs e)
        {
            if (BtnVerColorPress)
            {
                tsVerColor.Image = new Bitmap(ImgColorStream);
                tsVerColor.Text = "No ver Color";
                BtnNoVerColorPress = true;
                BtnVerColorPress = false;
                dgvListaArticulos.Columns["Color"].Visible = true;
                dgvListaArticulos.Columns["Articulo"].Width -= Color.Width;
            }
            else
            {
                if (BtnNoVerColorPress)
                {
                    tsVerColor.Image = ((Image)(miResources.GetObject("tsVerColor.Image")));
                    tsVerColor.Text = "Ver Color";
                    BtnNoVerColorPress = false;
                    BtnVerColorPress = true;
                    dgvListaArticulos.Columns["Color"].Visible = false;
                    dgvListaArticulos.Columns["Articulo"].Width += Color.Width;
                }
            }
        }

        private void tsVerLote_Click(object sender, EventArgs e)
        {
            if (BtnVerLotePress)
            {
                tsVerLote.Image = new Bitmap(ImgLoteStream);
                tsVerLote.Text = "No Ver Lote";
                BtnNoVerLotePress = true;
                BtnVerLotePress = false;
                dgvListaArticulos.Columns["CLote"].Visible = true;
                dgvListaArticulos.Columns["Articulo"].Width -= CLote.Width;
            }
            else
            {
                if (BtnNoVerLotePress)
                {
                    tsVerLote.Image = ((Image)(miResources.GetObject("tsVerLote.Image")));
                    BtnNoVerLotePress = false;
                    BtnVerLotePress = true;
                    dgvListaArticulos.Columns["CLote"].Visible = false;
                    dgvListaArticulos.Columns["Articulo"].Width += CLote.Width;
                }
            }
        }

        private void tsAgregar_Click(object sender, EventArgs e)
        {
            if (dgvFactura.RowCount != 0)
            {
                if (!FormProveedor)
                {
                    frmProducto = new FrmAgregarProducto();
                    frmProducto.MdiParent = this.MdiParent;
                    frmProducto.IdFactura = (int)dgvFactura.CurrentRow.Cells["Id"].Value;
                    frmProducto.CodigoProveedor = dgvFactura.CurrentRow.Cells["CodigoP"].Value.ToString();
                    frmProducto.FechaFactura = (DateTime)dgvFactura.CurrentRow.Cells["FechaIngreso"].Value;
                    frmProducto.DesctoFactura = (double)dgvFactura.CurrentRow.Cells["Descuento"].Value;
                    FormProveedor = true;
                    frmProducto.Show();
                }
            }
            else
            {
                OptionPane.MessageInformation("Debe seleccionar una Factura.");
            }
        }

        private void tsEditar_Click(object sender, EventArgs e)
        {
            if (dgvListaArticulos.RowCount != 0)
            {
                if (!FormProveedor)
                {
                    frmEditaProducto = new FrmEditarProducto();
                    frmEditaProducto.MdiParent = this.MdiParent;
                    var row = dgvListaArticulos.Rows[dgvListaArticulos.CurrentCell.RowIndex];
                    frmEditaProducto.ProductoFactura = GetProductoFactura();
                    frmEditaProducto.ImageColor = (Image)row.Cells["Color"].Value;
                    frmEditaProducto.DesctoFactura = (double)dgvFactura.CurrentRow.Cells["Descuento"].Value;
                    FormProveedor = true;
                    frmEditaProducto.Show();
                }
            }
            else
            {
                OptionPane.MessageInformation("No hay registros para editar.");
            }
        }

        private void tsEliminar_Click(object sender, EventArgs e)
        {
            if (dgvListaArticulos.RowCount != 0)
            {
                string rta = OptionPane.OptionBox("Ingrese contraseña de Administrador.",
                    "Administrador", OptionPane.Icon.LoginAdmin);
                if (!rta.Equals("false"))
                {
                    try
                    {
                        if (miBussinesUsuario.VerificarUsuarioAdmin(Encode.Encrypt(rta)))
                        {
                            int id = (int)dgvListaArticulos.CurrentRow.Cells["Id_"].Value;
                            miBussinesFactura.EliminarProductoFacturaProveedor(id);
                            dgvFactura_CellClick(null, null);
                        }
                        else
                        {
                            OptionPane.MessageInformation("La contraseña es incorrecta.");
                        }
                    }
                    catch (Exception ex)
                    {
                        OptionPane.MessageError(ex.Message);
                    }
                }
            }
            else
            {
                OptionPane.MessageInformation("No hay registros para eliminar.");
            }
        }

        /// <summary>
        /// Completa la secuencia de datos de un formulario de estencion.
        /// </summary>
        /// <param name="args">Objeto que encapsula la información del formulario.</param>
        void CompletaEventos_Completo(CompletaArgumentosDeEvento args)
        {
            try
            {
                if (SearchProveedor)
                {
                    var proveedor = (DTO.Clases.Proveedor)args.MiObjeto;
                    txtCodigo.Text = proveedor.CodigoInternoProveedor.ToString();
                    SearchProveedor = false;
                }
            }
            catch { }
            try
            {
                FormProveedor = Convert.ToBoolean(args.MiObjeto);
            }
            catch { }

            try
            {
                if (Convert.ToInt32(args.MiObjeto).Equals(1))
                {
                    if (BtnSearch)
                    {
                        btnBuscar_Click(null, null);
                    }
                    else
                    {
                        btnBuscar1_Click(null, null);
                    }
                    dgvFactura_CellClick(null, null);
                }
            }
            catch { }

            try
            {
                var miEgreso = (MiEgreso)args.MiObjeto;
                PrintEgreso(miEgreso.Egreso);
            }
            catch { }
        }

        /// <summary>
        /// Carga el GridView con el resultado de la consulta de Factura por número.
        /// </summary>
        /// <param name="numero">Número de la Factura a consultar.</param>
        private void ConsultaFacturaPorNumero(string numero)
        {
            try
            {
                dgvFactura.AutoGenerateColumns = false;
                dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor(numero, chkAnulada.Checked);
                if (dgvFactura.RowCount == 0)
                {
                    LimpiarGridProducto();
                    OptionPane.MessageInformation("No se encontrarón registros con ese Número Factura.");
                }
                else
                {
                    lblStatusFactura.Text = "1 / 1";
                }
            }
            catch (Exception ex)
            {
                OptionPane.MessageError(ex.Message);
            }
        }

        /// <summary>
        /// Carga el GridView con el resultado de la consulta de Factura por Codigo del Proveedor.
        /// </summary>
        /// <param name="codigo">Codigo del Proveedor a consultar.</param>
        private void ConsultaFacturaPorProveedor(string codigo)
        {
            RowFactura = 0;
            CurrentPageFactura = 1;
            Iteracion = 1;
            CodigoProveedor = Convert.ToInt32(codigo);
            ActivaChecked = chkAnulada.Checked;
            try
            {
                dgvFactura.AutoGenerateColumns = false;
                dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor
                    (CodigoProveedor, ActivaChecked, RowFactura, RowMaxFactura);
                if (dgvFactura.RowCount == 0)
                {
                    LimpiarGridProducto();
                    OptionPane.MessageInformation("No se encontrarón registros con ese Código de Proveedor.");
                }
                TotalRowFactura = miBussinesFactura.GetRowsConsultaFacturaProveedor(CodigoProveedor, ActivaChecked);
            }
            catch (Exception ex)
            {
                OptionPane.MessageError(ex.Message);
            }
            CalcularPaginas();
        }

        /// <summary>
        /// Carga el GridView con el resultado de la consulta de Factura por fecha de ingreso.
        /// </summary>
        private void ConsultaFacturaFecha()
        {
            RowFactura = 0;
            CurrentPageFactura = 1;
            Iteracion = 2;
            Fecha1 = dtpFecha1.Value;
            ActivaChecked = chkAnulada.Checked;
            try
            {
                dgvFactura.AutoGenerateColumns = false;
                dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor
                    (Fecha1, ActivaChecked, RowFactura, RowMaxFactura);
                if (dgvFactura.RowCount == 0)
                {
                    LimpiarGridProducto();
                    OptionPane.MessageInformation("No se encontrarón registros con esa fecha.");
                }
                TotalRowFactura = miBussinesFactura.GetRowsConsultaFacturaProveedor(Fecha1, ActivaChecked);
            }
            catch (Exception ex)
            {
                OptionPane.MessageError(ex.Message);
            }
            CalcularPaginas();
        }

        /// <summary>
        /// Carga el GridView con el resultado de la consulta de Factura por fecha de ingreso por periodo.
        /// </summary>
        private void ConsultaFacturaPeriodo()
        {
            RowFactura = 0;
            CurrentPageFactura = 1;
            Iteracion = 3;
            Fecha1 = dtpFecha1.Value;
            Fecha2 = dtpFecha2.Value;
            ActivaChecked = chkAnulada.Checked;
            try
            {
                dgvFactura.AutoGenerateColumns = false;
                dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor
                    (Fecha1, Fecha2, ActivaChecked, RowFactura, RowMaxFactura);
                if (dgvFactura.RowCount == 0)
                {
                    LimpiarGridProducto();
                    OptionPane.MessageInformation("No se encontrarón registros entre esas fechas.");
                }
                TotalRowFactura = miBussinesFactura.GetRowsConsultaFacturaProveedor(Fecha1, Fecha2, ActivaChecked);
            }
            catch (Exception ex)
            {
                OptionPane.MessageError(ex.Message);
            }
            CalcularPaginas();
        }

        /// <summary>
        /// Carga el GridView con el resultado de la consulta de Factura por Provedor y fecha de ingreso.
        /// </summary>
        private void ConsultaFacturaFechaProveedor()
        {
            CodigoProveedor = Convert.ToInt32(txtCodigo.Text);
            Fecha1 = dtpFecha1.Value;
            ActivaChecked = chkAnulada.Checked;
            try
            {
                dgvFactura.AutoGenerateColumns = false;
                dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor
                    (CodigoProveedor, Fecha1, ActivaChecked);
                if (dgvFactura.RowCount == 0)
                {
                    LimpiarGridProducto();
                    OptionPane.MessageInformation("No se encontrarón registros con ese Código de Proveedor en esa fecha.");
                }
                else
                {
                    lblStatusFactura.Text = "1 / 1";
                }
            }
            catch (Exception ex)
            {
                OptionPane.MessageError(ex.Message);
            }
            //lblStatusPaginaProducto.Text = 0 + " / " + 0;
        }

        /// <summary>
        /// Carga el GridView con el resultado de la consulta de Factura por proveedor y fecha de ingreso por periodo.
        /// </summary>
        private void ConsultaFacturaPeriodoProveedor()
        {
            RowFactura = 0;
            CurrentPageFactura = 1;
            Iteracion = 4;
            CodigoProveedor = Convert.ToInt32(txtCodigo.Text);
            Fecha1 = dtpFecha1.Value;
            Fecha2 = dtpFecha2.Value;
            ActivaChecked = chkAnulada.Checked;
            try
            {
                dgvFactura.AutoGenerateColumns = false;
                dgvFactura.DataSource = miBussinesFactura.ConsultaFacturaProveedor
                    (CodigoProveedor, Fecha1, Fecha2, ActivaChecked, RowFactura, RowMaxFactura);
                if (dgvFactura.RowCount == 0)
                {
                    LimpiarGridProducto();
                    OptionPane.MessageInformation("No se encontrarón registros con ese Código de Proveedor en esas fechas.");
                }
                TotalRowFactura = miBussinesFactura.GetRowsConsultaFacturaProveedor
                    (CodigoProveedor, Fecha1, Fecha2, ActivaChecked);
            }
            catch (Exception ex)
            {
                OptionPane.MessageError(ex.Message);
            }
            CalcularPaginas();
        }

        /// <summary>
        /// Calcula y muestra el número de paginas devueltas en la consulta.
        /// </summary>
        private void CalcularPaginas()
        {
            PaginasFactura = TotalRowFactura / RowMaxFactura;
            if (TotalRowFactura % RowMaxFactura != 0)
                PaginasFactura++;
            if (CurrentPageFactura > PaginasFactura)
                CurrentPageFactura = 0;
            lblStatusFactura.Text = CurrentPageFactura + " / " + PaginasFactura;
        }

        /// <summary>
        /// Inverte el valor de las fechas en caso de que la primera sea mayor a la segunda.
        /// </summary>
        private void InvertirFechas()
        {
            if (dtpFecha1.Value > dtpFecha2.Value)
            {
                var temp = dtpFecha1.Value;
                dtpFecha1.Value = dtpFecha2.Value;
                dtpFecha2.Value = temp;
            }
        }

        /// <summary>
        /// Carga los recursos del ensamblado usados en el formulario.
        /// </summary>
        private void CargarRecursos()
        {
            tsVerColor.Enabled = EnableColor;
            try
            {
                ImgMedidaStream = assembly.GetManifestResourceStream(ImagenMedida);
                ImgColorStream = assembly.GetManifestResourceStream(ImagenColor);
                ImgLoteStream = assembly.GetManifestResourceStream(ImagenLote);
            }
            catch
            {
                OptionPane.MessageError("Ocurrio un error al cargar los recursos.");
            }
        }

        /// <summary>
        /// Muestra los registros de Factura anulada resaltados de color gris.
        /// </summary>
        private void ColorFacturaAnulada()
        {
            foreach (DataGridViewRow row in dgvFactura.Rows)
            {
                if (row.Cells["Estado"].Value.ToString().Equals("Anulada"))
                {
                    row.DefaultCellStyle.BackColor = System.Drawing.Color.Silver;
                }
            }
        }

        /// <summary>
        /// Consulta y calcula los totales correspondientes a la factura.
        /// </summary>
        /// <param name="tabla">Tabla que almacena los registros de articulos de la factura.</param>
        private void CalcularTotales(DataTable tabla)
        {
            foreach (PanelTributario panel in miPanelTributario)
            {
                panelTributario.Controls.Remove(panel.PanelIva);
                panelTributario.Controls.Remove(panel.TxtGravado);
                panelTributario.Controls.Remove(panel.TxtTotalIva);
            }
            miPanelTributario.Clear();
            foreach (DataRow row in tabla.Rows)
            {
                var valor = Convert.ToDouble(row["Valor"]) - 
                    (Convert.ToDouble(row["Valor"]) * UseObject.RemoveCharacter(row["Descuento"].ToString(), '%') / 100);
                InformacionTributaria
                    (UseObject.RemoveCharacter(row["Iva"].ToString(), '%'), row["Cantidad"].ToString(), valor.ToString());
            }
            txtSubTotal.Text = UseObject.InsertSeparatorMil
                (
                  (tabla.AsEnumerable().Sum(s => (s.Field<int>("Valor") * s.Field<int>("Cantidad")))).ToString()
                );

            txtDescuento.Text = UseObject.InsertSeparatorMil
                (
                  (tabla.AsEnumerable()
                   .Sum(d => ((d.Field<int>("Valor") *
                               UseObject.RemoveCharacter(d["Descuento"].ToString() ,'%') / 100) * 
                               d.Field<int>("Cantidad"))))
                  .ToString()
                );

            txtIva.Text = UseObject.InsertSeparatorMil
                (
                  (tabla.AsEnumerable().Sum(i => (i.Field<double>("ValorIva") * i.Field<int>("Cantidad")))).ToString()
                );

            txtTotal.Text = UseObject.InsertSeparatorMil
                (
                  (tabla.AsEnumerable().Sum(t => (t.Field<double>("Total")))).ToString()
                );
        }

        private void PagosAFactura(int idFactura)
        {
            try
            {
                var total = miBussinesPago.PagosAProveedor(idFactura);
                if (total > UseObject.RemoveSeparatorMil(txtTotal.Text))
                {
                    txtAbono.Text = txtTotal.Text;
                    txtResta.Text = "0";
                }
                else
                {
                    txtAbono.Text = UseObject.InsertSeparatorMil(total.ToString());
                    txtResta.Text = UseObject.InsertSeparatorMil(
                        (UseObject.RemoveSeparatorMil(txtTotal.Text) - total).ToString());
                }
            }
            catch (Exception ex)
            {
                OptionPane.MessageError(ex.Message);
            }
        }

        private void PrintEgreso(string numero)
        {
            DialogResult rta = MessageBox.Show("¿Desea imprimir el recibo de Egreso?", "Factura Proveedor",
                MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (rta.Equals(DialogResult.Yes))
            {
            }
        }

        /// <summary>
        /// Carga y muestra la informacion tributaria del producto solicitado.
        /// </summary>
        /// <param name="iva">Iva a cargar del producto solicitado.</param>
        /// <param name="cantidad">Cantidad a cargar del Producto solicitado.</param>
        /// <param name="valorUnit">Valor unitario del Producto solicitado.</param>
        private void InformacionTributaria(double iva, string cantidad, string valorUnit)
        {
            try
            {
                var PanelName = "panelIva" + iva.ToString();
                var existe = 0;
                foreach (PanelTributario p in miPanelTributario)
                {
                    if (p.PanelIva.Name.Equals(PanelName))
                    {
                        var ivaGravado = UseObject.RemoveSeparatorMil(p.TxtGravado.Text);
                        p.TxtGravado.Text = UseObject.InsertSeparatorMil(
                                            (ivaGravado + (Convert.ToInt32(cantidad) *
                                            Convert.ToDouble(valorUnit))).ToString());
                        p.TxtTotalIva.Text = UseObject.InsertSeparatorMil(
                            (p.Iva * UseObject.RemoveSeparatorMil(p.TxtGravado.Text) / 100).ToString());
                        existe = 2;
                        break;
                    }
                    else
                    {
                        existe = 1;
                    }
                }
                if (existe == 0)      ///No existe ningun panel.
                {
                    CargarDatosTributarios(iva, cantidad, valorUnit, true, 0);
                }
                else
                {
                    if (existe == 1)  ///No existe el panel buscado.
                    {
                        var panel_ = miPanelTributario[miPanelTributario.Count - 1];
                        CargarDatosTributarios(iva, cantidad, valorUnit, false,
                            panel_.PanelIva.Location.X);

                        if (panel_.PanelIva.Location.X >= 279)
                        {
                            panelTributario.AutoScroll = true;
                            if (panelTributario.AutoScrollMargin.Width < 10 ||
                                panelTributario.AutoScrollMargin.Height < 10)
                            {
                                panelTributario.SetAutoScrollMargin(10, 0);
                            }
                        }
                    }
                }
            }
            catch
            {
            }
        }

        /// <summary>
        /// Carga los datos tributarios en los paneles y textos especificados.
        /// </summary>
        /// <param name="iva">Iva del producto a cargar.</param>
        /// <param name="cantidad"></param>
        /// <param name="valorUnit"></param>
        /// <param name="first">Indica si es el primer panel de la lista.</param>
        /// <param name="location_x">Posicion en pixeles del ultimo panel cargado.</param>
        private void CargarDatosTributarios
            (double iva, string cantidad, string valorUnit, bool first, int location_x)
        {
            var classMiPanelTributario = new PanelTributario();

            var miPanel = CrearPanel(iva, first, location_x);
            panelTributario.Controls.Add(miPanel);

            var lstTexBox = CrearTexbox(iva, first, location_x);

            ///txtGravado
            lstTexBox[0].Text = UseObject.InsertSeparatorMil(
                                (Convert.ToInt32(cantidad) *
                                Convert.ToDouble(valorUnit)).ToString());

            ///txtTotaliva
            lstTexBox[1].Text = UseObject.InsertSeparatorMil(
                ((iva * Convert.ToDouble(lstTexBox[0].Text)) / 100).ToString());

            panelTributario.Controls.Add(lstTexBox[0]);
            panelTributario.Controls.Add(lstTexBox[1]);

            classMiPanelTributario.Iva = iva;
            classMiPanelTributario.PanelIva = miPanel;
            classMiPanelTributario.TxtGravado = lstTexBox[0];
            classMiPanelTributario.TxtTotalIva = lstTexBox[1];
            miPanelTributario.Add(classMiPanelTributario);
        }

        /// <summary>
        /// Crea y carga un panel en el fomulario.
        /// </summary>
        /// <param name="iva">Iva del producto solicitado.</param>
        /// <param name="first">Indica si es el primer panel de la lista.</param>
        /// <param name="location_x">Posicion en pixeles del ultimo panel cargado.</param>
        /// <returns></returns>
        private Panel CrearPanel(double iva, bool first, int location_x)
        {
            var panel = new Panel();
            panel.BackColor = SystemColors.ControlLight;
            panel.BorderStyle = BorderStyle.FixedSingle;
            panel.Size = new Size(100, 25);
            panel.Name = "panelIva" + iva.ToString();
            panel.Controls.Add(CrearLabel(iva));
            if (first)
            {
                panel.Location = new Point(81, 8);
            }
            else
            {
                panel.Location = new Point(location_x + 99, 8);
            }
            return panel;
        }

        /// <summary>
        /// Crea una Etiqueta de texto (Label).
        /// </summary>
        /// <param name="iva">Iva del producto solicitado.</param>
        /// <returns></returns>
        private Label CrearLabel(double iva)
        {
            var lbl = new Label();
            lbl.AutoSize = true;
            lbl.Font = new Font("Microsoft Sans Serif", 9.75F, FontStyle.Bold,
                GraphicsUnit.Point, ((byte)(0)));
            lbl.Location = new Point(34, 4);
            lbl.Name = "lblIva" + iva.ToString();
            lbl.Size = new Size(29, 16);
            lbl.TabIndex = 0;
            lbl.Text = iva.ToString() + "%";
            return lbl;
        }

        /// <summary>
        /// Obtiene una lista de TextBox.
        /// </summary>
        /// <param name="iva">Iva del producto solicitado.</param>
        /// <param name="first">Indica si es el primer panel de la lista.</param>
        /// <param name="location_x">Posicion en pixeles del ultimo panel cargado.</param>
        /// <returns></returns>
        private List<TextBox> CrearTexbox(double iva, bool first, int location_x)
        {
            var txtGravado = NewTexbox();
            txtGravado.Name = "txtIvaGravado" + iva.ToString();
            var txtTotalIva = NewTexbox();
            txtTotalIva.Name = "txtTotalIva" + iva.ToString();
            if (first)
            {
                txtGravado.Location = new Point(81, 32);
                txtTotalIva.Location = new Point(81, 53);
            }
            else
            {
                txtGravado.Location = new Point(location_x + 99, 32);
                txtTotalIva.Location = new Point(location_x + 99, 53);
            }
            var lista = new List<TextBox>();
            lista.Add(txtGravado);
            lista.Add(txtTotalIva);
            return lista;
        }

        /// <summary>
        /// Obtiene un nuevo TextBox.
        /// </summary>
        /// <returns></returns>
        private TextBox NewTexbox()
        {
            var texbox = new TextBox();
            texbox.BackColor = SystemColors.Window;
            texbox.BorderStyle = BorderStyle.FixedSingle;
            texbox.ReadOnly = true;
            texbox.TextAlign = HorizontalAlignment.Right;
            texbox.Size = new System.Drawing.Size(100, 22);
            return texbox;
        }

        /// <summary>
        /// Limpia los registro del DataGrid de Producto.
        /// </summary>
        private void LimpiarGridProducto()
        {
            while (dgvListaArticulos.RowCount != 0)
            {
                dgvListaArticulos.Rows.RemoveAt(0);
            }
        }

        /// <summary>
        /// Obtiene el registro de Factura Proveedor seleccionado del Grid.
        /// </summary>
        /// <returns></returns>
        private FacturaProveedor GetFacturaProveedor()
        {
            var factura = new FacturaProveedor();
            var registro = dgvFactura.Rows[dgvFactura.CurrentCell.RowIndex];
            factura.Id = Convert.ToInt32(registro.Cells["Id"].Value);
            factura.Numero = registro.Cells["Numero"].Value.ToString();
            factura.Proveedor.CodigoInternoProveedor = Convert.ToInt32(registro.Cells["CodigoP"].Value);
            factura.Proveedor.NitProveedor = registro.Cells["Nit"].Value.ToString();
            factura.Proveedor.NombreProveedor = registro.Cells["Proveedor"].Value.ToString();
            factura.EstadoFactura.Id = Convert.ToInt32(registro.Cells["IdFormaPago"].Value);
            factura.EstadoFactura.Descripcion = registro.Cells["FormaPago"].Value.ToString();
            factura.FechaIngreso = Convert.ToDateTime(registro.Cells["FechaIngreso"].Value);
            factura.FechaLimite = Convert.ToDateTime(registro.Cells["FechaLimite"].Value);
            factura.Descuento = Convert.ToDouble(registro.Cells["Descuento"].Value);
            var estado = registro.Cells["Estado"].Value.ToString();
            if (estado.Equals("Activa"))
            {
                factura.Estado = true;
            }
            else
            {
                factura.Estado = false;
            }
            return factura;
        }

        /// <summary>
        /// Obtiene un el registro del producto seleccionado en el Grid.
        /// </summary>
        /// <returns></returns>
        private ProductoFacturaProveedor GetProductoFactura()
        {
            var row = dgvListaArticulos.Rows[dgvListaArticulos.CurrentCell.RowIndex];
            var producto = new ProductoFacturaProveedor();
            producto.Id = (int)row.Cells["Id_"].Value;
            producto.IdFactura = (int)dgvFactura.CurrentRow.Cells["Id"].Value;
            producto.Producto.CodigoInternoProducto = (string)row.Cells["Codigo"].Value;
            producto.Inventario.IdMedida = (int)row.Cells["IdMedida"].Value;
            producto.Producto.ValorUnidadMedida = (string)row.Cells["Medida"].Value;
            producto.Inventario.IdColor = (int)row.Cells["IdColor"].Value;
            producto.Cantidad = (int)row.Cells["Cantidad"].Value;
            producto.Producto.ValorVentaProducto = (int)row.Cells["Valor"].Value;
            producto.Lote.Id = (int)row.Cells["IdLote"].Value;
            producto.Lote.Numero = (string)row.Cells["CLote"].Value;
            producto.Lote.Fecha = (DateTime)dgvFactura.CurrentRow.Cells["FechaIngreso"].Value;
            producto.Producto.ValorIva = UseObject.RemoveCharacter(row.Cells["Iva"].Value.ToString(), '%');
            producto.Producto.Descuento = UseObject.RemoveCharacter(row.Cells["DesctoProducto"].Value.ToString(), '%');
            return producto;
        }

        /// <summary>
        /// Cierra los Formulario que hayan sido creados como extensión de éste.
        /// </summary>
        private void CerrarForms()
        {
            if (formProveedor != null)
            {
                formProveedor.Close();
            }
            if (frmEditaFactura != null)
            {
                frmEditaFactura.Close();
            }
            if (frmProducto != null)
            {
                frmProducto.Close();
            }
            if (frmEditaProducto != null)
            {
                frmEditaProducto.Close();
            }
            CompletaEventos.CapturaEvento(false);
        }

    }

    internal class MiEgreso
    {
        public string Egreso { set; get; }
    }

    /// <summary>
    /// Representa un clase para la estructura de criterios de consulta de factura proveedor.
    /// </summary>
    internal class CriterioFacturaProveedor
    {
        /// <summary>
        /// Obtiene o estable el primer listado de criterio de factura proveedor.
        /// </summary>
        public List<Inventario.Producto.Criterio> lista { set; get; }

        /// <summary>
        /// Obtiene o estable el segundo listado de criterio de factura proveedor.
        /// </summary>
        public List<Inventario.Producto.Criterio> lista1 { set; get; }

        /// <summary>
        /// Obtiene o estable el tercer listado de criterio de factura proveedor.
        /// </summary>
        public List<Inventario.Producto.Criterio> lista2 { set; get; }

        /// <summary>
        /// Inicializa una nueva instancia de la clase CriterioFacturaProveedor.
        /// </summary>
        public CriterioFacturaProveedor()
        {
            lista = new List<Inventario.Producto.Criterio>();
            lista.Add(new Inventario.Producto.Criterio
            {
                Id = 1,
                Nombre = "Número"
            });
            lista.Add(new Inventario.Producto.Criterio
            {
                Id = 2,
                Nombre = "Proveedor"
            });

            lista1 = new List<Inventario.Producto.Criterio>();
            lista1.Add(new Inventario.Producto.Criterio
            {
                Id = 1,
                Nombre = " "
            });
            lista1.Add(new Inventario.Producto.Criterio
            {
                Id = 2,
                Nombre = "Fecha Ingreso"
            });

            lista2 = new List<Inventario.Producto.Criterio>();
            lista2.Add(new Inventario.Producto.Criterio
            {
                Id = 1,
                Nombre = "Fecha Simple"
            });
            lista2.Add(new Inventario.Producto.Criterio
            {
                Id = 2,
                Nombre = "Periodo de Fecha"
            });
        }
    }
}